/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package exclusionmutua;

import atributos.Atributo;
import atributos.ManagerAtributos;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Date;
import jxta.Configuracion;
import jxta.CrearOutputPipe;
import jxta.ManagerJXTA;
import jxta.ProcesarConsultas;
import net.jxta.endpoint.Message;
import net.jxta.protocol.PipeAdvertisement;
import utilidades.AdminMensaje;
import utilidades.ConsultaAdvertisement;

/**
 *
 * @author Eduardo
 */
public class ExclusionMutuaJxta {
    private Configuracion conf;
    private ManagerJXTA mgJxta;
    private ManagerAtributos mgAtt;

    public ExclusionMutuaJxta(Configuracion conf, ManagerJXTA mgJxta, ManagerAtributos mgAtt) {
        this.conf = conf;
        this.mgJxta = mgJxta;
        this.mgAtt = mgAtt;
    }

    /**
     * Envia un mensaje de consulta a traves de la red jxta a otro peer.
     *
     * @param idDocumento id del Documento. Identifica la Sección Critica.
     * @param thisPeerID El identificador de este peer.
     * @param toPeer El peer al cual va dirigido el mensaje
     * @param sequenceNumber El numero de sequencia de la sección critica.
     * @throws IOException Si no se puede enviar el mensaje
     * @deprecated Reemplazado por enviarMensajeRequest(String idDocumento, Integer sequenceNumber)
     */
    @Deprecated
    public void enviarMensajeRequest(String idDocumento,
            PipeAdvertisement thisPeerID,
            PipeAdvertisement toPeer,
            Integer sequenceNumber) throws IOException {
        Message msj = AdminMensaje.crearRequestToken(idDocumento, thisPeerID, sequenceNumber, AdminMensaje.NAME_SPACE);
        CrearOutputPipe outPipe = new CrearOutputPipe(conf.getPipeService(), toPeer, msj,null,0);
        (new Thread(outPipe, "Hilo que envia RequestMessage")).start();
        System.out.println("Se esta enviando mensaje de peticion a través de jxta.");
    }

    /**
     * Envia un mensaje de consulta a todos los peers de la red jxta.
     *
     * @param idDocumento id del Documento. Identifica la Sección Critica.
     * @param sequenceNumber El numero de sequencia de la sección critica.
     */
public void enviarMensajeRequest(String idDocumento, Integer sequenceNumber, TokenListener listener,int numSec, String origen,String color){
        System.out.println("====================EXCLUSIÓN MUTUA=======================");
        System.out.println("====ENVIANDO MENSAJE DE PETICIÓN DE SECCIÓN CRÍTICA=======");
        InputPipeTokenEM ippem = new InputPipeTokenEM(mgJxta.getExclusionMutuaMap(), listener);
        String query = AdminMensaje.ID_DOCUMENTO_TAG + idDocumento + ProcesarConsultas.SEP
                + AdminMensaje.SEQ_NUMB_TAG +  sequenceNumber + ProcesarConsultas.SEP
                + AdminMensaje.NUM_SEC + numSec + ProcesarConsultas.SEP
                + AdminMensaje.NODO_ORIGEN + origen + ProcesarConsultas.SEP
                + AdminMensaje.COLOR + color + ProcesarConsultas.SEP ;

        mgJxta.publicarConsulta(query, ConsultaAdvertisement.REQUESTING_CS, ippem);
    }


    public void enviarToken(PipeAdvertisement toPeer, Token token,String destino,int secuencia) throws IOException{
        Message msj = AdminMensaje.crearEnvioToken(token, AdminMensaje.NAME_SPACE);
        CrearOutputPipe outPipe = new CrearOutputPipe(conf.getPipeService(), toPeer, msj,destino,secuencia);
        (new Thread(outPipe, "Hilo que envia el mensaje Token.")).start();
        System.out.println("Se esta enviando el token a través de jxta.");
    }

}
